package com.cskaoyan.javase.array._4variable;

/**
 * 可变参数（variable parameter）是Java1.5时增加的新特性，当然我们已经在用Java8了，它一点也不新了。
 * 可变参数的用途不算非常多，但也是常见语法。
 * 可变参数适用于：参数个数不确定，类型确定的情况
 *
 * 可变参数的语法：
 * [修饰符列表] 返回值类型 方法名 (形式参数列表,数据类型... 变量名){
 *   //方法体
 * }
 * 解释：
 *      数据类型... 表示对应数据类型的可变参数
 *      可变参数的本质是数组
 *      代码中的可变参数会自动把它当作数组处理。
 *
 *      在调用可变参数的方法时，可以主动传入不确定个数的对应实参数据，然后编译器会自动将这些元素封装成对应类型的数组。
 *
 *      和直接用数组做形参相比较，之前数组是自己创建的，现在数组是底层创建的
 *
 *      像这种程序员少做事，底层多做事，实现原理不变的语法，称之为"语法糖"
 *      随着JDK版本升级，语法糖越来越多
 *      语法糖可以大大节省程序员写代码的精力。
 *
 *
 *
 * @since 09:27
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo {
    public static void main(String[] args) {
        int[] arr = {1, 2, 3, 4, 5, 6};
        System.out.println(sum(arr));

        System.out.println(sum(1, 2, 3));
        System.out.println(sum(1, 2));
        System.out.println(sum(1, 2, 3, 4));
    }

    // 需求: 求不确定个数的int数值的和
    /*public static int sum(int[] arr) {
        // 遍历容器求和
        int sumValue = 0;
        for (int ele : arr) {
            sumValue += ele;
        }
        return sumValue;
    }*/

    public static int sum(int... vp) {
        // 方法体中可变参数当成数组去处理
        int sumValue = 0;
        for (int ele : vp) {
            sumValue += ele;
        }
        return sumValue;
    }
}
